#ifndef __qylexerconfigurator__
#define __qylexerconfigurator__

#include <QObject>

class QScriptValue;
class QySciLexer;

/*! \class QyLexerConfigurator
	\brief Конфигуратор лексеров

	QyLexerConfigurator интерфейс для создания и конфигурирования лексеров из скрипта.

	Принцип прост, экземпляр QyLexerConfigurator регистрируется как глобальный объект в интерпритаторе. После чего, методы QyLexerConfigurator становятся доступными из скрипта. Далее для конфигурирования лексера (если лексера не существует то он будет создан), пользователю необходимо вызвать метод lexer, указав маску файлов, для обработкой которых будет заниматься лексер. После работы с объектом, для установки заданных значений, следует вызвать метод applySettings, с объектом лексер в качестве параметра.

	Например:

	\code

	var myLexer = lexerConfigurator.lexer("*.cpp;*.h");

	...
	myLexer.language = "C/C++";
	...

	lexerConfigurator.applySettings(myLexer);

	\endcode

	Подробное описание свойств лексера см. QySciLexer.

*/

// Примечание: создать лексер в данном контексте означает - создать фабрику, создающую необходимый лексер. По сути это фабрика фабрик. Но это внутренние вещи.

class QyLexerConfigurator : public QObject {
	Q_OBJECT
public:
	QyLexerConfigurator( QObject * parent=0 ); //!< Конструктор
	virtual ~QyLexerConfigurator(); //!< Диструктор

	Q_INVOKABLE QObject * lexer( const QString & fileFilter ); //!< получить лексер в соответствии с фильтром, например первый вызов lexer("*.cpp;*.h") - создаст лексер для С++, а второй вернет уже созданный

public slots:
	void applySettings( const QScriptValue & value ); //!< применить настройки лексера, value - это лексер

};

#endif/*__qylexerconfigurator__*/
